package com.warski.wonderfires.page.led;

import android.annotation.SuppressLint;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.InputType;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.EditText;
import android.widget.SeekBar;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
import com.warski.wonderfires.R;
import com.warski.wonderfires.TheApplication;
import com.warski.wonderfires.dlna.params.SettingsConstants;
import com.warski.wonderfires.net.JsonStep;
import com.warski.wonderfires.net.TCPConn;
import com.warski.wonderfires.view.TitleBarView;
import java.util.ArrayList;
import java.util.HashMap;

/**
* 模式选择界面
*/
public class ModleActivity extends AppCompatActivity {

    private TabLayout tabLayout = null;
    private ViewPager viewPager;
    private Fragment[] mFragmentArrays;
    private String[] mTabTitles = {"基本", "开合", "过度", "流水", "流动", "拖尾", "正跑", "反跑"};
    private EditText lampEditText;
    private String modelData;
    private String ledLength;
    private String speed;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.tab_layout);
        tabLayout = findViewById(R.id.tablayout);
        viewPager = findViewById(R.id.tab_viewpager);
        lampEditText = new EditText(this);
        lampEditText.setTextColor(Color.BLACK);
        lampEditText.setInputType(InputType.TYPE_CLASS_NUMBER);

        TitleBarView titleBarView = findViewById(R.id.titlebar);
        titleBarView.setLeftIconOnClickListener(v -> finish());

        ledLength = (String) TheApplication.getInstance().settingsGet(SettingsConstants.PREF_SETTINGS_KEY_LED_LENGTH, "2");
        speed = (String) TheApplication.getInstance().settingsGet(SettingsConstants.PREF_SETTINGS_KEY_LED_SPEED, "30");
        int margin = dpToPx(20);
        titleBarView.setRightIconOnClickListener(v -> {
            //在添加动态view之前，先做子view是否已经具有父view的判断，如果存在就调用 removeView()方法
            if (lampEditText.getParent() != null)
                ((ViewGroup) lampEditText.getParent()).removeView(lampEditText);

            lampEditText.setText(ledLength);
            new AlertDialog.Builder(this)
                    .setTitle(R.string.lamp_belt_length)
                    .setView(lampEditText, margin, 0, margin, 0)
                    .setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss())
                    .setPositiveButton(R.string.confirm, (dialog, which) -> {
                        ledLength = lampEditText.getText().toString();
                        mHandler.sendEmptyMessage(2);
                        TheApplication.getInstance().settingsPut(SettingsConstants.PREF_SETTINGS_KEY_LED_LENGTH, ledLength);
                        dialog.dismiss();
                    })
                    .show();
        });
        SeekBar speedBar = findViewById(R.id.speed_bar);
        speedBar.setProgress(Integer.parseInt(speed));
        speedBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                speed = String.valueOf(progress);
            }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                mHandler.sendEmptyMessage(2);
                TheApplication.getInstance().settingsPut(SettingsConstants.PREF_SETTINGS_KEY_LED_SPEED, speed);
            }
        });
        initData();
        initView();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @SuppressLint("HandlerLeak")
    private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            if (msg.what == 1) modelData = (String) msg.obj;
            TCPConn.getInstance().sendData(String.format(JsonStep.LedModelFormatSet.getJsonString(),modelData,ledLength,speed));
        }
    };

    private int dpToPx(int dp) {
        return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
    }

    HashMap<Integer, ArrayList<String>> map = new HashMap<>();
    private void initData() {
        // 基本
        ArrayList<String> jiBen = new ArrayList<>();
        jiBen.add("1 自动循环");
        jiBen.add("2 正向幻彩");
        jiBen.add("3 反向幻彩");
        jiBen.add("4 七彩能量");
        jiBen.add("5 七色跳变");
        jiBen.add("6 红绿蓝跳变");
        jiBen.add("7 黄青紫跳变");
        jiBen.add("8 七色频闪");
        jiBen.add("9 红绿蓝频闪");
        jiBen.add("10 黄青紫频闪");
        jiBen.add("11 七色渐变");
        jiBen.add("12 红黄交替渐变");
        jiBen.add("13 红紫交替渐变");
        jiBen.add("14 绿青交替渐变");
        jiBen.add("15 绿黄交替渐变");
        jiBen.add("16 蓝紫交替渐变");
        jiBen.add("17 红色跑马");
        jiBen.add("18 绿色跑马");
        jiBen.add("19 蓝色跑马");
        jiBen.add("20 黄色跑马");
        jiBen.add("21 青色跑马");
        jiBen.add("22 紫色跑马");
        jiBen.add("23 白色跑马");
        jiBen.add("24 正向七彩追光");
        jiBen.add("25 反向七彩追光");
        jiBen.add("26 正向红绿蓝追光");
        jiBen.add("27 反向红绿蓝追光");
        jiBen.add("28 正向黄青紫追光");
        jiBen.add("29 反向黄青紫追光");
        jiBen.add("30 正向七彩飘动");
        jiBen.add("31 反向七彩飘动");
        jiBen.add("32 正向红绿蓝飘动");
        jiBen.add("33 反向红绿蓝飘动");
        jiBen.add("34 正向黄青紫飘动");
        jiBen.add("35 反向黄青紫飘动");
        jiBen.add("36 正向七彩刷色");
        jiBen.add("37 反向七彩刷色");
        jiBen.add("38 正向红绿蓝刷色");
        jiBen.add("39 反向红绿蓝刷色");
        jiBen.add("40 正向黄青紫刷色");
        jiBen.add("41 反向黄青紫刷色");
        map.put(0, jiBen);

        // 开合
        ArrayList<String> kaiHe = new ArrayList<>();

        kaiHe.add("1 七彩闭幕");
        kaiHe.add("2 七彩拉幕");
        kaiHe.add("3 红绿蓝闭幕");
        kaiHe.add("4 红绿蓝拉幕");
        kaiHe.add("5 黄青闭幕");
        kaiHe.add("6 黄青拉幕");
        kaiHe.add("7 红色闭幕");
        kaiHe.add("8 红色拉幕");
        kaiHe.add("9 绿色闭幕");
        kaiHe.add("10 绿色拉幕");
        kaiHe.add("11 蓝色闭幕");
        kaiHe.add("12 蓝色拉幕");
        kaiHe.add("13 黄色闭幕");
        kaiHe.add("14 黄色拉幕");
        kaiHe.add("15 青色闭幕");
        kaiHe.add("16 青色拉幕");
        kaiHe.add("17 紫色闭幕");
        kaiHe.add("18 紫色拉幕");
        kaiHe.add("19 白色闭幕");
        kaiHe.add("20 白色拉幕");
        kaiHe.add("21 七彩刷色闭幕");
        kaiHe.add("22 七彩刷色拉幕");
        kaiHe.add("23 红绿蓝刷色闭幕");
        kaiHe.add("24 红绿蓝刷色拉幕");
        kaiHe.add("25 黄青紫刷色闭幕");
        kaiHe.add("26 黄青紫刷色拉幕");
        map.put(1, kaiHe);

        // 过渡
        ArrayList<String> guoDu = new ArrayList<>();

        guoDu.add("1 正向七色明暗过渡");
        guoDu.add("2 反向七色明暗过渡");
        guoDu.add("3 正向红绿蓝明暗过渡");
        guoDu.add("4 反向红绿蓝明暗过渡");
        guoDu.add("5 正向黄青紫明暗过渡");
        guoDu.add("6 反向黄青紫明暗过渡");
        guoDu.add("7 正向六色明暗过渡红色");
        guoDu.add("8 反向六色明暗过渡红色");
        guoDu.add("9 正向六色明暗过渡绿色");
        guoDu.add("10 反向六色明暗过渡绿色");
        guoDu.add("11 正向六色明暗过渡蓝色");
        guoDu.add("12 反向六色明暗过渡蓝色");
        guoDu.add("13 正向六色明暗过渡黄色");
        guoDu.add("14 反向六色明暗过渡黄色");
        guoDu.add("15 正向六色明暗过渡青色");
        guoDu.add("16 反向六色明暗过渡青色");
        guoDu.add("17 正向六色明暗过渡紫色");
        guoDu.add("18 反向六色明暗过渡紫色");
        guoDu.add("19 正向六色明暗过渡白色");
        guoDu.add("20 反向六色明暗过渡白色");
        map.put(2, guoDu);


        // 流水
        ArrayList<String> liuShui = new ArrayList<>();

        liuShui.add("1 正向七彩流水");
        liuShui.add("2 反向七彩流水");
        liuShui.add("3 正向红绿蓝流水");
        liuShui.add("4 反向红绿蓝流水");
        liuShui.add("5 正向黄青紫流水");
        liuShui.add("6 反向黄青紫流水");
        liuShui.add("7 正向红绿流水");
        liuShui.add("8 反向红绿流水");
        liuShui.add("9 正向绿蓝流水");
        liuShui.add("10 反向绿蓝流水");
        liuShui.add("11 正向黄蓝流水");
        liuShui.add("12 反向黄蓝流水");
        liuShui.add("13 正向黄青流水");
        liuShui.add("14 反向黄青流水");
        liuShui.add("15 正向青紫流水");
        liuShui.add("16 反向青紫流水");
        liuShui.add("17 正向黑白流水");
        liuShui.add("18 反向黑白流水");
        map.put(3, liuShui);

        // 流动
        ArrayList<String> liuDong = new ArrayList<>();

        liuDong.add("1 正向白红白流动");
        liuDong.add("2 反向白红白流动");
        liuDong.add("3 正向白绿白流动");
        liuDong.add("4 反向白绿白流动");
        liuDong.add("5 正向白蓝白流动");
        liuDong.add("6 反向白蓝白流动");
        liuDong.add("7 正向白黄白流动");
        liuDong.add("8 反向白黄白流动");
        liuDong.add("9 正向白青白流动");
        liuDong.add("10 反向白青白流动");
        liuDong.add("11 正向白紫白流动");
        liuDong.add("12 反向白紫白流动");
        liuDong.add("13 正向红白红流动");
        liuDong.add("14 反向红白红流动");
        liuDong.add("15 正向绿白绿流动");
        liuDong.add("16 反向绿白绿流动");
        liuDong.add("17 正向蓝白蓝流动");
        liuDong.add("18 反向黄白黄流动");
        liuDong.add("19 反向黄白黄流动");
        liuDong.add("20 反向黄白黄流动");
        liuDong.add("21 反向青白青流动");
        liuDong.add("22 反向青白青流动");
        liuDong.add("23 反向紫白紫流动");
        liuDong.add("24 反向紫白紫流动");
        map.put(4, liuDong);

        // 拖尾
        ArrayList<String> tuoWei = new ArrayList<>();

        tuoWei.add("1 正向七彩拖尾");
        tuoWei.add("2 反向七彩拖尾");
        tuoWei.add("3 正向红色拖尾");
        tuoWei.add("4 反向红色拖尾");
        tuoWei.add("5 正向绿色拖尾");
        tuoWei.add("6 反向绿色拖尾");
        tuoWei.add("7 正向蓝色拖尾");
        tuoWei.add("8 反向蓝色拖尾");
        tuoWei.add("9 正向黄色拖尾");
        tuoWei.add("10 反向黄色拖尾");
        tuoWei.add("11 正向青色拖尾");
        tuoWei.add("12 反向青色拖尾");
        tuoWei.add("13 正向紫色拖尾");
        tuoWei.add("14 反向紫色拖尾");
        tuoWei.add("15 正向白色拖尾");
        tuoWei.add("16 反向白色拖尾");

        map.put(5, tuoWei);

        // 正跑
        ArrayList<String> isPao = new ArrayList<>();

        isPao.add("1 正向红色跑动");
        isPao.add("2 正向绿色跑动");
        isPao.add("3 正向蓝色跑动");
        isPao.add("4 正向黄色跑动");
        isPao.add("5 正向青色跑动");
        isPao.add("6 正向紫色跑动");
        isPao.add("7 正向白色跑动");
        isPao.add("8 正向七色跑动");
        isPao.add("9 正向红绿蓝跑动");
        isPao.add("10 正向黄青紫跑动");
        isPao.add("11 正向蓝紫青跑动");
        isPao.add("12 正向蓝绿青跑动");
        isPao.add("13 正向白底红点跑动");
        isPao.add("14 正向红底绿点跑动");
        isPao.add("15 正向绿底蓝点跑动");
        isPao.add("16 正向蓝底黄点跑动");
        isPao.add("17 正向黄底青点跑动");
        isPao.add("18 正向青底紫点跑动");
        isPao.add("19 正向紫底白点跑动");
        isPao.add("20 正向红底白点跑动");
        isPao.add("21 正向红底七色跑动");
        isPao.add("22 正向绿底七色跑动");
        isPao.add("23 正向蓝底七色跑动");
        isPao.add("24 正向黄底七色跑动");
        isPao.add("25 正向紫底七色跑动");
        isPao.add("26 正向白底七色跑动");
        isPao.add("27 正向蓝底绿点跑动");
        isPao.add("28 正向蓝底红点跑动");
        isPao.add("29 正向紫底黄点跑动");
        isPao.add("30 正向黄底白点跑动");
        isPao.add("31 正向白底黄点跑动");

        map.put(6, isPao);

        // 反跑
        ArrayList<String> fanPao = new ArrayList<>();

        fanPao.add("1 反向红色跑动");
        fanPao.add("2 反向绿色跑动");
        fanPao.add("3 反向蓝色跑动");
        fanPao.add("4 反向黄色跑动");
        fanPao.add("5 反向青色跑动");
        fanPao.add("6 反向紫色跑动");
        fanPao.add("7 反向白色跑动");
        fanPao.add("8 反向七色跑动");
        fanPao.add("9 反向红绿蓝跑动");
        fanPao.add("10 反向黄青紫跑动");
        fanPao.add("11 反向蓝紫青跑动");
        fanPao.add("12 反向蓝绿青跑动");
        fanPao.add("13 反向白底红点跑动");
        fanPao.add("14 反向红底绿点跑动");
        fanPao.add("15 反向绿底蓝点跑动");
        fanPao.add("16 反向蓝底黄点跑动");
        fanPao.add("17 反向黄底青点跑动");
        fanPao.add("18 反向青底紫点跑动");
        fanPao.add("19 反向紫底白点跑动");
        fanPao.add("20 反向红底白点跑动");
        fanPao.add("21 反向红底七色跑动");
        fanPao.add("22 反向绿底七色跑动");
        fanPao.add("23 反向蓝底七色跑动");
        fanPao.add("24 反向黄底七色跑动");
        fanPao.add("25 反向紫底七色跑动");
        fanPao.add("26 反向白底七色跑动");
        fanPao.add("27 反向蓝底绿点跑动");
        fanPao.add("28 反向蓝底红点跑动");
        fanPao.add("29 反向紫底黄点跑动");
        fanPao.add("30 反向黄底白点跑动");
        fanPao.add("31 反向白底黄点跑动");

        map.put(7, fanPao);
        // 七彩  七色  红绿蓝  黄青紫 红色  绿色 蓝色  黄色 青色  紫色 白色
    }

    private void initView() {
        mFragmentArrays = new Fragment[mTabTitles.length];

        tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);

        for (int i = 0; i < mFragmentArrays.length; i++) {
            mFragmentArrays[i] = new TabFragment(map.get(i),mHandler);
        }

        PagerAdapter pagerAdapter = new MyViewPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(pagerAdapter);
        //将ViewPager和TabLayout绑定
        tabLayout.setupWithViewPager(viewPager);
    }

    final class MyViewPagerAdapter extends FragmentPagerAdapter {
        public MyViewPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentArrays[position];
        }


        @Override
        public int getCount() {
            return mFragmentArrays.length;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mTabTitles[position];
        }

        @Override
        public long getItemId(int position) {
            return position;
        }
    }
}
